package com.prd.dto;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 工作单数据表
 * </p>
 *
 * @author lizhaoyi
 * @since 2023-11-06
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WorkOrderDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @ApiModelProperty("主键id")
    @JsonSerialize(using= ToStringSerializer.class)
    private Long id;

    /**
     * 工作单主题
     */
    @ApiModelProperty("工作单主题")
    @NotBlank(message = "工作单主题不能为空")
    private String orderTitle;

    /**
     * 绩效维度0-内部运营1-客户2-财务3-学习与成长
     */
    @ApiModelProperty("绩效维度0-内部运营1-客户2-财务3-学习与成长")
    private Integer performanceDimension;

    /**
     * 工作安排人
     */
    @ApiModelProperty("工作安排人")
    private String workPlanBy;

    /**
     * 工作安排人id
     */
    @ApiModelProperty("工作安排人id")
    private Long workPlanId;

    /**
     * 工作单负责人
     */
    @ApiModelProperty("工作单负责人")
    private String workLeaderBy;

    /**
     * 工作单负责人id
     */
    @ApiModelProperty("工作单负责人id")
    private Long workLeaderId;

    /**
     * 制单人
     */
    @ApiModelProperty("制单人")
    private String createdWorkOrderBy;

    /**
     * 制单人id
     */
    @ApiModelProperty("制单人id")
    private Long createdWorkOrderId;

    /**
     * 执行人
     */
    @ApiModelProperty("执行人")
    private String executor;

    /**
     * 执行人id
     */
    @ApiModelProperty("执行人id")
    private Long executorId;

    /**
     * 督导人
     */
    @ApiModelProperty("督导人")
    private String supervisor;

    /**
     * 督导人id
     */
    @ApiModelProperty("督导人id")
    private Long supervisorId;

    /**
     * 执行负责人
     */
    @ApiModelProperty("执行负责人")
    private String leaderExecutor;

    /**
     * 执行负责人id
     */
    @ApiModelProperty("执行负责人id")
    private Long leaderExecutorId;

    /**
     * 督导负责人
     */
    @ApiModelProperty("督导负责人")
    private String leaderWatcher;

    /**
     * 督导负责人id
     */
    @ApiModelProperty("督导负责人id")
    private Long leaderSupervisorId;

    /**
     * 预决算督导
     */
    @ApiModelProperty("预决算督导")
    private String budgetSupervisor;

    /**
     * 预决算督导id
     */
    @ApiModelProperty("预决算督导id")
    private Long budgetSupervisorId;

    /**
     * 抄送
     */
    @ApiModelProperty("抄送")
    private String ccTo;

    /**
     * 工作单状态0-草稿1-待执行2-未安排3-执行中4-重新执行5-预完成6-已完成7-已撤销
     */
    @ApiModelProperty("工作单状态0-草稿1-待执行2-未安排3-执行中4-重新执行5-预完成6-已完成7-已撤销")
    private Integer orderStatus;

    /**
     * 角色0-制单人1-工作单负责人2-执行负责人3-督导负责人4-工作安排人5-预/决算督导
     */
    @ApiModelProperty("角色0-制单人1-工作单负责人2-执行负责人3-督导负责人4-工作安排人5-预/决算督导")
    private Integer role;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createdTime;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private String createdBy;

    /**
     * 创建人id
     */
    @ApiModelProperty("创建人id")
    private Long createdById;

    /**
     * 创建工作单日期
     */
    @ApiModelProperty("创建工作单日期")
    private LocalDate createdOrderDate;

    @ApiModelProperty("工作单时间范围查询-开始时间")
    private LocalDate startTime;

    @ApiModelProperty("工作单时间范围查询-结束时间")
    private LocalDate endTime;

    @ApiModelProperty("要点记录对象")
    private WorkPointRecordDTO workPointRecordDTO;

    @ApiModelProperty("要点记录对象列表")
    private List<WorkPointRecordDTO> workPointRecordDTOList;

    @ApiModelProperty("投入记录对象")
    private WorkInputRecordDTO workInputRecordDTO;

    @ApiModelProperty("投入记录对象列表")
    private List<WorkInputRecordDTO> workInputRecordDTOList;

    @ApiModelProperty("时间节点记录对象")
    private WorkTimeNodeRecordDTO workTimeNodeRecordDTO;

    @ApiModelProperty("时间节点记录对象列表")
    private List<WorkTimeNodeRecordDTO> workTimeNodeRecordDTOList;


}
